<?php

namespace app\common\model;

use app\common\validate\AdminValidate;
use think\Model;
use think\model\concern\SoftDelete;

// 管理员admin模型
class Admin extends Model
{
    //软删除
    use SoftDelete;

    // 登录方法
    public function login($data)
    {
        // 实例化AdminValidate验证器
        $validate = new AdminValidate();
        // 判断验证结果
        if (!$validate->scene('login')->check($data))   //验证不通过
        {
            return $validate->getError();
        }
        $data['password'] = md5($data['password']);
        $result = $this->where($data)->find();
        if ($result) {
            // 判断用户是否可用
            if ($result['status'] != 1) {
                return '此账户被禁用!';
            }

            $session_data = [
                'id' => $result['id'],
                'username' => $result['username'],
                'nickname' => $result['nickname'],
                'is_super' => $result['is_super']
            ];
            // 保存session数据
            session('admin', $session_data);
            // 1表示用户名、密码正确
            return 1;
        } else {
            return '用户名或密码错误!';
        }

    }


    // 注册账户方法
    public function register($data)
    {
        // 实例化AdminValidate验证器
        $validate = new AdminValidate();
        if (!$validate->scene('register')->check($data)) {
            return $validate->getError();
        } else {
            $data['password'] = md5($data['password']);
            $result = $this->allowField(true)->save($data);
            if ($result) {
                // 调用公共类下的send_email函数发送邮件
                send_email($data['email'], '注册管理员账户成功！', '注册管理员账户成功！');
                // 1表示注成功
                return 1;
            } else {
                return '注册失败！';
            }
        }
    }


    // 重置密码方法
    public function reset($data)
    {
        // 实例化AdminValidate验证器
        $validate = new AdminValidate();
        if (!$validate->scene('reset')->check($data)) {
            return $validate->getError();
        }
        // 判断验证码是否正确
        if ($data['code'] != session('code')) {
            return '验证码不正确！';
        }
        // 查询出用户信息
        $user_info = $this->where('email', '=', $data['email'])->find();
        // 随机密码
        $random_pwd = mt_rand(100000, 999999);
        // 重新设置密码
        $user_info->password = md5($random_pwd);
        $result = $user_info->save();
        if ($result) {
            $sen_result = send_email($data['email'], '重置密码成功', '用户：' . $user_info['username'] . '<br/> 您的新密码为：' . $random_pwd);
            return 1;
        } else {
            return '重置密码失败！';
        }

    }


    // 添加管理员方法
    public function adminadd($data)
    {
        // 实例化AdminValidate验证器
        $validate = new AdminValidate();
        if (!$validate->scene('add')->check($data)) {
            return $validate->getError();
        } else {
            $data['password'] = md5($data['password']);
            $result = $this->allowField(true)->save($data);
            if ($result) {
                return 1;
            } else {
                return '添加失败！';
            }
        }
    }

    // 编辑管理方法
    public function adminedit($data)
    {
        // 实例化AdminValidate验证器
        $validate = new AdminValidate();
        if (!$validate->scene('edit')->check($data)){
            return $validate->getError();
        }
        $admin_info = $this->find($data['id']);
        if (!$admin_info){
            abort('404', '该管理员不存在');
        }
        $admin_info->username = $data['username'];
        $admin_info->nickname = $data['nickname'];
        $admin_info->email = $data['email'];
        $result = $admin_info->save();
        if ($result){
            return 1;
        }else{
            return '管理员信息修改失败';
        }
    }

}
